importPackage(Packages.de.elo.ix.client);
//@include lib_Class.js
//@include lib_sol.common.Template.js
//@include lib_sol.common.ix.FunctionBase.js
var logger = sol.create("sol.Logger", { scope: "sol.common.ix.functions.CheckSolutionEnabled" });
/**
* Checks if a `solution` is enabled.
*
* When called as RF it returns false if the `solution` is not enabled, true if it is enabled.
*
* When used in a workflow script, it updates the ELO_WF_STATUS to either "SOLUTION_ENABLED" or "SOLUTION_DISABLED" (see {@link #DEFAULT_POSITIVE_STATUS} and {@link #DEFAULT_NEGATIV_STATUS}).
*
* @param
*
* @author ESt, ELO Digital Office GmbH
* @version 1.0
*
* @eloix
* @requires sol.common.Template
* @requires sol.common.RepoUtils
* @requires sol.common.WfUtils
* @requires sol.common.ix.RfUtils
* @requires sol.common.ix.FunctionBase
*
*/
sol.define("sol.common.ix.functions.CheckSolutionEnabled", {
extend: "sol.common.ix.FunctionBase",
requiredConfig: ["solution"],
/** @cfg {String} solution (required)
* module/package name of solution to be checked.
*/
/**
* @private
* @property {String} [DEFAULT_POSITIVE_STATUS="SOLUTION_ENABLED"] Default workflow status in case of a successful check
*/
DEFAULT_POSITIVE_STATUS: "SOLUTION_ENABLED",
/**
* @private
* @property {String} [DEFAULT_NEGATIV_STATUS="SOLUTION_DISABLED"] Default workflow status in case of a successful check
*/
DEFAULT_NEGATIV_STATUS: "SOLUTION_DISABLED",
initialize: function (config) {
var me = this;
me.$super("sol.common.ix.FunctionBase", "initialize", [config]);
},
/**
* Check, if solution is enabled.
*/
process: function () {
var me = this,
enabled = me.checkSolutionEnabled(),
startNode, status;
if (me.wfDiagram) {
startNode = sol.common.WfUtils.getNode(me.wfDiagram, 0);
status = (enabled) ? me.DEFAULT_POSITIVE_STATUS : me.DEFAULT_NEGATIV_STATUS;
startNode.yesNoCondition = status;
me.logger.info(["changed ELO_WF_STATUS to '{0}' (flowId={1})", status, me.wfDiagram.id]);
}
return enabled;
},
/**
* @private
* Checks if `solution` is enabled by checking the existence of the solution folder inside the Business solutions folder.
* @return {Boolean}
*/
checkSolutionEnabled: function () {
var me = this,
repoUtils = sol.common.RepoUtils, modulePath, moduleObjId, solutionEnabled;
if (typeof me.solution === "string" && me.solution.trim()) {
modulePath = repoUtils.resolveSpecialFolder("{{bsFolderPath}}/" + me.solution.trim().toLowerCase()),
moduleObjId = repoUtils.getObjId(modulePath),
solutionEnabled = !!moduleObjId;
} else {
throw "solution parameter must be a non-empty string.";
}
me.logger.info(["check finished: {0} enabled={1};", me.solution, solutionEnabled]);
return solutionEnabled;
}
});
/**
* @member sol.common.ix.functions.CheckSolutionEnabled
* @static
* @inheritdoc sol.common.ix.FunctionBase#onEnterNode
*/
function onEnterNode(clInfo, userId, wFDiagram, nodeId) {
logger.enter("onEnterNode_CheckSolutionEnabled", { flowId: wFDiagram.id, nodeId: nodeId });
var params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId, "solution");
params.wfDiagram = wFDiagram;
(sol.create("sol.common.ix.functions.CheckSolutionEnabled", params)).process();
logger.exit("onEnterNode_CheckSolutionEnabled");
}
/**
* @member sol.common.ix.functions.CheckSolutionEnabled
* @static
* @inheritdoc sol.common.ix.FunctionBase#onExitNode
*/
function onExitNode(clInfo, userId, wFDiagram, nodeId) {
logger.enter("onExitNode_CheckSolutionEnabled", { flowId: wFDiagram.id, nodeId: nodeId });
var params = sol.common.WfUtils.parseAndCheckParams(wFDiagram, nodeId, "solution");
params.wfDiagram = wFDiagram;
(sol.create("sol.common.ix.functions.CheckSolutionEnabled", params)).process();
logger.exit("onExitNode_CheckSolutionEnabled");
}
/**
* @member sol.common.ix.functions.CheckSolutionEnabled
* @method RF_sol_common_function_CheckSolutionEnabled
* @static
* @inheritdoc sol.common.ix.FunctionBase#RF_FunctionName
*/
function RF_sol_common_function_CheckSolutionEnabled(iXSEContext, args) {
logger.enter("RF_sol_common_function_CheckSolutionEnabled", args);
var params = sol.common.ix.RfUtils.parseAndCheckParams(iXSEContext, arguments.callee.name, args, "solution"),
module = sol.create("sol.common.ix.functions.CheckSolutionEnabled", params);
logger.exit("RF_sol_common_function_CheckSolutionEnabled");
return sol.common.ix.RfUtils.stringify({ enabled: module.process() });
}